package com.easyfun.healthmagicbox.widget;

import com.easyfun.healthmagicbox.R;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;

//�Զ����ת��View
public class zhuanpanView extends View implements Runnable {

	private int x = 180;

	private boolean ifRotate = false;

	private boolean isPointTo = false;
	private int pointTo = 90;
	private Drawable drawable;

	public zhuanpanView(Context context, AttributeSet attrs) {

		super(context, attrs);

		Resources r = context.getResources();
		drawable = r.getDrawable(R.drawable.xh);

		// 用线程来刷新界面
		Thread thread = new Thread(this);
		thread.start();

	}

	// 重写View类的onDraw()函数
	@Override
	protected void onDraw(Canvas canvas) {
		// 设置转盘旋转矩阵为以（160,160）坐标为圆心，旋转X角度

		canvas.save();

		// 由于你的表盘是作为背景图做的，在不同屏幕下其中心坐标可能不同，这个你自己根据你屏幕大小自己计算
		int xCenter = getWidth() / 2; // 表盘的中心x坐标
		int yCenter = getHeight() - 180;// 表盘的中心y坐标

		int w = drawable.getIntrinsicWidth(); // 箭头图片在屏幕上的长度
		int h = drawable.getIntrinsicHeight();// 箭头图片在屏幕上的高度

		drawable.setBounds(xCenter, yCenter, xCenter + w, yCenter + h);

		canvas.rotate(180 + x, xCenter, yCenter);
		drawable.draw(canvas);
		canvas.restore();
	}

	// 重写的run函数，用来控制转盘转动
	public void run() {
		try {
			while (true) {
				if (ifRotate) {
					if (isPointTo)
					{
						if (this.x > pointTo)
						{
							this.x -= 1;
						}else if (this.x < pointTo)
						{
							this.x += 1;
						}else
						{
							ifRotate = false;
						}
						
					}else
					{
						this.x += 10;
					}
					// 由于你这个表盘是半盘，它最多转半圈，所以作此处理。
					if (x == 360) {
						x = 180;
					}
					// 这个函数强制UI线程刷新界面
					this.postInvalidate();
					Thread.sleep(50);
				}
			}

		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	public void startRotate() {
		this.ifRotate = true;
	}

	public void stopRotate() {
		this.ifRotate = false;
	}
	
	public void pointTo(int angle)
	{
		this.pointTo = angle;
		this.ifRotate = true;
		this.isPointTo = true;
		
	}

}
